Mongodb insert 插入数据之 重复键 处理

源代码:
var lgInfor={title:””,content:””,time:””,style:””};
然后进行循环调用以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function(username,callback) {
lgInfor.style = "大学";
lgInfor.grade = "大一";
lgInfor.time = new Date();
lgInfor.content = username;
this.db.insert(collectionName, lgInfor, function (err, data) {
if (err) {
console.log(err);
return;
} else {
console.log(username + " 注册成功");
}
});
this.db.insert(collectionName, username, callback);
};

此时调用的时候第一次没什么问题,当第二次调用的时候会出现以下问题:

1
2
3
4
5
6
7
{ [MongoError: E11000 duplicate key error index: test.User.$_id_  dup key: { : ObjectId('5362235c895105241d43c46e') }]
name: 'MongoError',
err: 'E11000 duplicate key error index: test.User.$_id_ dup key: { : ObjectId(\'5362235c895105241d43c46e\') }',
code: 11000,
n: 0,
connectionId: 1,
ok: 1 }

这是什么意思呢? 意思就是说 出现了重复了键,可是 对于mongodb来说每次插入一条记录就是新生成一个文档,就会自动生成ObjectId ,应该是唯一的啊,怎么会出现重复的问题呢?

在网上找了一下答案,说什么清空一下当前集合就可以什么的,尝试了一下 然并卵,不知道是什么驱动着我去修改了一下代码,修改后的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function(username,callback) {
var lgInfor={};
lgInfor.style = "大学";
lgInfor.grade = "大一";
lgInfor.time = new Date();
lgInfor.content = username;
this.db.insert(collectionName, lgInfor, function (err, data) {
if (err) {
console.log(err);
return;
} else {
console.log(username + " 注册成功");
}
});
this.db.insert(collectionName, username, callback);
};

仅仅是把在外边定义的变量拿到里边而已,问题就解决了,虽然问题是解决了,但是原理还不是很清楚哎,于是又search了一下,有一姐们(看ID猜测)给出了如是答案(php中):

—>>”把定义$data放到foreach里面,否则mongodb会认为是同一条记录重复插入”<<—

但是具体为什么mongodb会认为是同一条记录重复插入呢,还是不知道哎,哪位大神知道愿指点小弟一番,小弟感激涕零